home *** CD-ROM | disk | FTP | other *** search
- Expanding the hardware capabilities of DISPLAY/PRINTER
- ======================================================
-
- FreeDOS DISPLAY.SYS and PRINTER.SYS have some routines which are dependant on
- the hardware type that they work on. This hardware is selected in the first
- parameter of the commandline.
- For example:
-
- DEVICE=C:\FDOS\DISPLAY.SYS CON=(EGA,437,1)
-
- specifies a hardware type "EGA".
-
-
- Currently, there are five hardware types implemented in DISPLAY.SYS, and none
- in PRINTER.SYS. The types in DISPLAY.SYS in fact refer to the same
- producedures, but define different "subfont" sizes, which helps you save some
- RAM. You can also do this specifying the number of subfonts (ready in DISPLAY
- 0.09, to come very soon). These will come ready on DISPLAY.SYS 0.09.
-
- They are
-
- EGA (automatic detection of number of subfonts, depending whether
- you use EGA or VGA)
-
- EGA 8 (these two are equivalent to DISPLAY.SYS CON=(EGA,437,(1,1)) )
- LCD
-
- EGA 14 (this is equivalent to DISPLAY.SYS CON=(EGA,437,(1,2)) )
-
- VGA (this is equivalent to DISPLAY.SYS CON=(EGA,437,(1,3)) )
-
-
- The specific procedures for EGA, as well as the Int10h handler of DISPLAY.SYS,
- are the original code of DISPLAY by Ilya V. Vasilyev (all the other stuff is
- what I have added).
-
- The notes below explain how to donate code to DISPLAY.SYS and PRINTER.SYS if
- you want to enlarge the capabilities with
-
-
-
- How can I contribute a new hardware type?
- =========================================
-
- In order to contribute a new type, the following structure is required:
-
- HwName DB "xxxxxxxx"
- CPHwName DB "xxxxxxxx"
- InitP DW
- InitParam DW
-
- HwName: 0-padded hardware name (such as "EGA") as it should appear in the
- DISPLAY.SYS or PRINTER.SYS command line
- CPHwName: space (#32)-padded name of the hardware to be identified in the
- codepage entry header of the CPI files
- InitP: Near pointer to the hardware device initialisation procedure
- InitParam: A param to be passed to the previous procedure, so that the same
- procedure can be used for different table entries
-
-
- Appart from the table, you need to create three procedures:
-
- HWInit (NON-RESIDENT)
- A procedure to be executed when DISPLAY is loaded, that detects the
- hardware and initialises the required data
- SwSelect (RESIDENT)
- A procedure to load certain codepage whose data resides in certain
- buffer supplied by the core component
- HwSelect (RESIDENT)
- A procedure to load certain codepage whose data is determined by
- hardware
-
- Please send to me two files, written in NASM language, and please use no names
- for each field in the table, and a specific name for each procedure. A first
- file should contain the table above filled as appropriate, and the HWInit
- procedure. The second file should contain the two resident procedures (and any
- other resident procedure or variable that is required).
-
-
-
- What procedures can I call?
- ===========================
-
- Respect to procedures, in HwInit you can use ANY procedure throuhgout the file.
- In particular, you may find useful to use these:
-
- OutStrDX: write a string (which ends in '$').
- IN: DX: near address of the '$'-terminated string
- OUT: -
-
- WriteNumber: writes a number in decimal
- IN: AX: a number under 1000 to be displayed (3 digits at most)
- OUT: -
- NOTES: the "SyntaxErrorStr" string space is reused, and this string can no
- longer be used after this procedure is called
-
-
- In the resident routines, you can only call resident procedures (there's
- nothing else interesting in the driver that you may want to call).
-
- In DISPLAY.SYS ONLY: you should make calls to the old Int10h handler by using
-
- call FAR [cs:dOld10]
-
- Of course, you can call any resident routine from HwInit, but the converse is
- not true.
-
-
-
- What variables can/should I use?
- ================================
-
- When designing your routines, there is a number of variables that you can use,
- and even a number of variables that you are expected to fill. See the table
- below.
-
- Flags of the variable
- ---------------------
- FLAG Meaning
- ------------------------------------------------------------------------
- + You should mandatorily fill in this variable in HwInit with the
- appropriate value, or else DISPLAY/PRINTER will not work
- * Non-resident variables that you can optionally fill in, if the
- information is available
- & Resident variable that you can ONLY write on the HwInit procedure
- (but not in the resident routines)
- ------------------------------------------------------------------------
-
-
- Useable variables
- --------------------------------------------------------------------------
- VarName Flag Type Meaning
- --------------------------------------------------------------------------
- pRefreshHWcp + WORD Near pointer to the software codepage
- selection routine
- pRefreshSWcp + WORD Near pointer to the hardware codepage
- selection routine
- wMinFontSize * WORD (DISPLAY.SYS ONLY) minimum number of subfonts
- that DISPLAY.SYS should admit. If the user
- specifies less than this value, then user's
- option will be ignored, and this variable will
- be used
- bMaxHWcpNumber * BYTE Maximum number of hardware hardcoded codepages
- bAdapter + BYTE (DISPLAY.SYS ONLY) Adapter type (or compatible),
- which is used by the DISPLAY int10h handler in
- order to provide the appropriate font info (for
- example, does not offer the 8x16 font if adapter
- is NOT VGA). See the constants below
- wTableSize + WORD (PRINTER.SYS ONLY) This variable exists in both
- drivers, but you only have to fill in it in
- PRINTER.SYS. As in PRINTER there are no subfonts,
- you have to specify a maximum size of the font
- info, so that PRINTER can reserve required RAM
- buffers of the correct size to store the font
- info.
- DISPLAY will automatically override any value
- you give with a value based on the number of
- subfonts.
- wHardCPs & WORD You can specify here ONE default hardware
- codepage for the device on startup (but leave it
- 0 if it is unknown)
- --------------------------------------------------------------------------
-
-
- Adapter type constants (for bAdapter)
- ----------------------
- Adapter type Value
- ---------------------
- NO 0
- MDA 2
- HGA 4
- CGA 6
- EGA 8
- MCGA 10
- VGA 12
- VESA 14
-
-
-
-
- What are the interfaces to the procedures?
- ==========================================
-
- In this section it is described the interfaces of each of the three
- procedures, and the registers they may use. Please note that there's
- quite a few of stack space remaining, so you shouldn't abuse the stack.
-
-
- HwInit
- ------
- Detects the hardware device, initialises the device and some variables.
- IN: AX: the parameter stored in the device structure above
- OUT: CFlag=0 on success
- CFlag=1 on failure, if the device was not found, or couldn't be
- initialised. In such case:
- DX: near pointer to a string explaining the error (and
- ending in '$')
- REGISTERS: You must preserve SI if you use it, but can use the other
- registers freely (except SS, SP, BP)
-
- RefreshHWcp
- -----------
- Refreshes certain hardware (hardcoded) codepage, if possible
- IN: CX: the number of hardware codepage to be restored, starting on 0
- OUT: CFlag set on error, clear on success
- REGISTERS: AX,CX,DS,ES,DI can be freely used, the others must be
- preserved
-
-
- RefreshSWcp
- -----------
- Sets a user defined codepage from user loaded font info
- IN: AL: screen mode (as set by the functions ah=00h, ax=4f02h of the
- interrupt 10h), -1 if mode is unknown
- OUT: CFlag set on error, clear on success
- REGISTERS: AX,CX,DS,ES,DI can be freely used, the others must be
- preserved
- NOTE: The font information about the font to be set is stored in
- the following variables, that must be used:
- bFont8x8: times 2048 DB ; space for the 8x8 font
- bFont8x14: times 3584 DB ; space for the 8x14 font
- bFont8x16: times 4096 DB ; space for the 8x16 font
-
-
-
- when are these routines to be inserted?
- =======================================
-
- When you have them ready, please mail them to me to (aitorsm -AT- inicia.es),
- and they will be launched with the next version of DISPLAY.SYS and PRINTER.SYS
- starting on version 0.09, which at the moment in which these notes are
- written, is not yet ready.
-
-
-
- are you going to write more of these routines?
- ==============================================
-
- Personally I am fully satisfied with having support for EGA/VGA displays, and
- am not planning to write any more hardware support, although you can easily
- write your own routines, that can be easily attached to the current
- DISPLAY/PRINTER scheme.
-
- However, as there's no PRINTER.SYS hardware management routine, I would
- consider writing one for PRINTER.SYS *provided that*:
- (a) You plan to use it, and you can show you really need it
- (b) You have CPI fonts to use with it
- (c) Someone (maybe me, maybe you) has enough technical information about
- the routines, because I have very little information about it...
-
-
- ===================
- Aitor SANTAMARIA MERINO
- The FreeDOS Project, 7th of AUGUST, 2003
-
- Version 1.1: 15th of September, 2003
- (thanks to Martin Stromberg)
-